#ifndef __TRIE_TREE_H__
#define __TRIE_TREE_H__
#include "common.h"
#include <tr1/memory>

class TrieNode;
typedef std::tr1::shared_ptr<TrieNode> TrieNodePtr;
template< typename DATATYPE, typename INDEXTYPE=char, typename LOCKTYPE=>
class TrieNode{
public:
	TrieNode();
	~TrieNode();

	TrieNodePtr Insert(const INDEXTYPE& index, DATATYPE data);
	bool RemoveNode(const INDEXTYPE& index, DATATYPE data);
	bool RemoveChildren(const INDEXTYPE& index, DATATYPE data);

	DATATYPE& GetData();
	const DATATYPE& GetData() const;
private:
	std::map<INDEXTYPE, TrieNodePtr> mChildren;
	DATATYPE mData;
};

class TrieTree{
public:
	TrieTree();
	~TrieTree();
private:

};

#endif

